#ifndef SYNCHROTIMERSERVER_H
#define SYNCHROTIMERSERVER_H

#include <QWidget>
#include <QDateTime>
#include <QThread>
#include <QUdpSocket>
#include <QStandardItemModel>
#include "setDateThread.h"
#include "portdialog.h"
#include "udpWorker.h"

QT_BEGIN_NAMESPACE
namespace Ui { class SynchroTimerServer; }
QT_END_NAMESPACE

class SynchroTimerServer : public QWidget
{
    Q_OBJECT

public:
    SynchroTimerServer(QWidget *parent = nullptr);
    ~SynchroTimerServer();

signals:
    void StartThead();
    void SendDatagram(const QHostAddress &ipAddress,const quint16 &port);

public slots:
    void ReceiverDateInfo(const QDateTime &curDatetime);

private slots:
    void on_StartServerBtn_clicked();
    void on_SetBtn_clicked();
    void processPendingDatagram();

private:
    void InitDate();// 初始化
    void pauseAllWorkers();// 清除工作者线程
    void pauseWorker();// 清除断开的连接

private:
    Ui::SynchroTimerServer *ui;
    //获取事件线程
    setDateThread *m_pDTThread;
    QThread *m_pThread;
    // 端口设置子窗体
    PortDialog *m_portDialog;
    // 端口号
    QString m_sPort;
    // UDP套接字
    QUdpSocket *m_UdpSocket;
    // 保存工作者信息
    QVector<udpWorker*> m_workers;
    // 初始化时间控件
    QDateTime *m_curDatetime;
    // 保护 workers 的互斥锁
    QMutex mutex;
    // 存储工作者信息以及端口、IP信息
    QHash<QString,udpWorker*> m_clients;
    // disconnect信息
    QVector<QString> m_connectInfo;
};
#endif // SYNCHROTIMERSERVER_H
